using System;

namespace TrueCode.Core.Aspects
{
	public enum Arguments
	{
		None,
		All,
		Exclude,
		Include
	}

//	[AttributeUsage(	AttributeTargets.Assembly	| AttributeTargets.Module	|
//						AttributeTargets.Class		| AttributeTargets.Struct	| 
//						AttributeTargets.Method		| AttributeTargets.Property |
//						AttributeTargets.Constructor,
//						AllowMultiple = true, 
//						Inherited = false )]
	//[MulticastAttributeUsage( MulticastTargets.Method | MulticastTargets.Constructor, AllowMultiple = true )]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = true)]
	public class TraceAttribute : Attribute//  : MulticastAttribute, IRequirePostSharp
	{
//		public String	LogBookFieldName	= "_logbook";
//		public String	LogBookArgumentName	= "logbook";
//		public String	SubSystem;
//
//		public readonly Arguments Action;
//		public readonly List< String > ArgumentsList;
//		
		public TraceAttribute( ) : this( Arguments.None ) {}
		public TraceAttribute( Arguments action, params String[ ] arguments )
		{
//			Action			= action;
//			ArgumentsList	= new List< String >(arguments);

//			AttributeTargetMemberAttributes = MulticastAttributes.NonAbstract	| MulticastAttributes.AnyScope |
//											  MulticastAttributes.Public		| MulticastAttributes.Managed;
		}

		#region IRequirePostSharp Members
//		public PostSharpRequirements GetPostSharpRequirements( )
//		{
//			PostSharpRequirements requirements = new PostSharpRequirements( );
//			requirements.PlugIns.Add( "TrueCode.AspectWeavers" );
//			requirements.Tasks	.Add( "TrueCode.AspectWeavers.TraceTask" );
//			return requirements;
//		}
		#endregion
	}
}
